# util/log_config.py
import logging
import os
from pathlib import Path
from logging.handlers import RotatingFileHandler


LOG_FORMAT = '%(asctime)s | %(filename)s:%(lineno)d | %(levelname)s | %(message)s'


__ROOT_LOGGER_SET__ = False

def get_the_logger(name):
    if not __ROOT_LOGGER_SET__:
        setup_logging()
    return logging.getLogger(name)



def setup_logging():
    """全局日志配置函数，在项目启动时调用一次"""
    # 1. 定义日志输出格式
    log_format = logging.Formatter(LOG_FORMAT)

    # 2. 设置日志级别（DEBUG < INFO < WARNING < ERROR < CRITICAL）
    log_level = logging.INFO

    # 3. 配置全局根日志器
    root_logger = logging.getLogger()
    root_logger.setLevel(log_level)
    root_logger.handlers.clear()  # 清除默认处理器，避免重复输出

    # 4. 添加控制台处理器（开发环境用，可选）
    console_handler = logging.StreamHandler()
    console_handler.setFormatter(log_format)
    root_logger.addHandler(console_handler)


    # 5. 创建日志存放目录（项目根目录下的 logs 文件夹）
    log_dir = Path(__file__).resolve().parent.parent / "logs"  # 假设 util/ 在 trade/ 下
    log_dir.mkdir(parents=True, exist_ok=True)  # 自动创建父目录

    # 6. 添加文件处理器（按大小轮转，避免日志文件过大）
    log_file = log_dir / "app.log"
    file_handler = RotatingFileHandler(
        log_file,
        maxBytes=10*1024*1024,  # 单个文件最大 10MB
        backupCount=5,          # 最多保留 5 个备份文件
        encoding="utf-8"
    )
    file_handler.setFormatter(log_format)
    root_logger.addHandler(file_handler)

    # 7. 测试日志输出
    root_logger.info("global logging config completed")

    global __ROOT_LOGGER_SET__
    __ROOT_LOGGER_SET__ = True


if __name__ == '__main__':
    setup_logging()